(function(d) {
	var c = d.ajax;
	var a = {};
	var e = [];
	var b = [];
	d.ajax = function(h) {
		h = jQuery.extend(h, jQuery.extend( {}, jQuery.ajaxSettings, h));
		var g = h.port;
		switch (h.mode) {
		case "abort":
			if (a[g]) {
				a[g].abort();
			}
			return a[g] = c.apply(this, arguments);
		case "queue":
			var f = h.complete;
			h.complete = function() {
				if (f) {
					f.apply(this, arguments);
				}
				jQuery( [ c ]).dequeue("ajax" + g);
			};
			jQuery( [ c ]).queue("ajax" + g, function() {
				c(h);
			});
			return;
		case "sync":
			var i = e.length;
			e[i] = {
				error : h.error,
				success : h.success,
				complete : h.complete,
				done : false
			};
			b[i] = {
				error : [],
				success : [],
				complete : []
			};
			h.error = function() {
				b[i].error = arguments;
			};
			h.success = function() {
				b[i].success = arguments;
			};
			h.complete = function() {
				b[i].complete = arguments;
				e[i].done = true;
				if (i == 0 || !e[i - 1]) {
					for ( var j = i; j < e.length && e[j].done; j++) {
						if (e[j].error) {
							e[j].error.apply(jQuery, b[j].error);
						}
						if (e[j].success) {
							e[j].success.apply(jQuery, b[j].success);
						}
						if (e[j].complete) {
							e[j].complete.apply(jQuery, b[j].complete);
						}
						e[j] = null;
						b[j] = null;
					}
				}
			};
		}
		return c.apply(this, arguments);
	};
})(jQuery);
(function(a) {
	a.fn.extend( {
		autocomplete : function(b, c) {
			var d = typeof b == "string";
			c = a.extend( {}, a.Autocompleter.defaults, {
				url : d ? b : null,
				data : d ? null : b,
				delay : d ? a.Autocompleter.defaults.delay : 10,
				max : c && !c.scroll ? 10 : 150
			}, c);
			c.highlight = c.highlight || function(e) {
				return e;
			};
			c.formatMatch = c.formatMatch || c.formatItem;
			return this.each(function() {
				new a.Autocompleter(this, c);
			});
		},
		result : function(b) {
			return this.bind("result", b);
		},
		search : function(b) {
			return this.trigger("search", [ b ]);
		},
		flushCache : function() {
			return this.trigger("flushCache");
		},
		setOptions : function(b) {
			return this.trigger("setOptions", [ b ]);
		},
		unautocomplete : function() {
			return this.trigger("unautocomplete");
		}
	});
	a.Autocompleter = function(l, g) {
		var c = {
			UP : 38,
			DOWN : 40,
			DEL : 46,
			TAB : 9,
			RETURN : 13,
			ESC : 27,
			COMMA : 188,
			PAGEUP : 33,
			PAGEDOWN : 34,
			BACKSPACE : 8
		};
		var b = a(l).attr("autocomplete", "off").addClass(g.inputClass);
		var j;
		var p = "";
		var m = a.Autocompleter.Cache(g);
		var e = 0;
		var u;
		var x = {
			mouseDownOnSelect : false
		};
		var r = a.Autocompleter.Select(g, l, d, x);
		var w;
		a.browser.opera && a(l.form).bind("submit.autocomplete", function() {
			if (w) {
				w = false;
				return false;
			}
		});
		b.bind(
				(a.browser.opera ? "keypress" : "keydown") + ".autocomplete",
				function(y) {
					e = 1;
					u = y.keyCode;
					switch (y.keyCode) {
					case c.UP:
						y.preventDefault();
						if (r.visible()) {
							r.prev();
						} else {
							t(0, true);
						}
						break;
					case c.DOWN:
						y.preventDefault();
						if (r.visible()) {
							r.next();
						} else {
							t(0, true);
						}
						break;
					case c.PAGEUP:
						y.preventDefault();
						if (r.visible()) {
							r.pageUp();
						} else {
							t(0, true);
						}
						break;
					case c.PAGEDOWN:
						y.preventDefault();
						if (r.visible()) {
							r.pageDown();
						} else {
							t(0, true);
						}
						break;
					case g.multiple && a.trim(g.multipleSeparator) == ","
							&& c.COMMA:
					case c.TAB:
					case c.RETURN:
						if (d()) {
							y.preventDefault();
							w = true;
							return false;
						}
						break;
					case c.ESC:
						r.hide();
						break;
					default:
						clearTimeout(j);
						j = setTimeout(t, g.delay);
						break;
					}
				}).focus(function() {
			e++;
		}).blur(function() {
			e = 0;
			if (!x.mouseDownOnSelect) {
				s();
			}
		}).click(function() {
			if (e++ > 1 && !r.visible()) {
				t(0, true);
			}
		}).bind("search", function() {
			var y = (arguments.length > 1) ? arguments[1] : null;
			function z(D, C) {
				var A;
				if (C && C.length) {
					for ( var B = 0; B < C.length; B++) {
						if (C[B].result.toLowerCase() == D.toLowerCase()) {
							A = C[B];
							break;
						}
					}
				}
				if (typeof y == "function") {
					y(A);
				} else {
					b.trigger("result", A && [ A.data, A.value ]);
				}
			}
			a.each(h(b.val()), function(A, B) {
				f(B, z, z);
			});
		}).bind("flushCache", function() {
			m.flush();
		}).bind("setOptions", function() {
			a.extend(g, arguments[1]);
			if ("data" in arguments[1]) {
				m.populate();
			}
		}).bind("unautocomplete", function() {
			r.unbind();
			b.unbind();
			a(l.form).unbind(".autocomplete");
		});
		function d() {
			var B = r.selected();
			if (!B) {
				return false;
			}
			var y = B.result;
			p = y;
			if (g.multiple) {
				var E = h(b.val());
				if (E.length > 1) {
					var A = g.multipleSeparator.length;
					var D = a(l).selection().start;
					var C, z = 0;
					a.each(E, function(F, G) {
						z += G.length;
						if (D <= z) {
							C = F;
							return false;
						}
						z += A;
					});
					E[C] = y;
					y = E.join(g.multipleSeparator);
				}
				y += g.multipleSeparator;
			}
			b.val(y);
			v();
			b.trigger("result", [ B.data, B.value ]);
			return true;
		}
		function t(A, z) {
			if (u == c.DEL) {
				r.hide();
				return;
			}
			var y = b.val();
			if (!z && y == p) {
				return;
			}
			p = y;
			y = i(y);
			if (y.length >= g.minChars) {
				b.addClass(g.loadingClass);
				if (!g.matchCase) {
					y = y.toLowerCase();
				}
				f(y, k, v);
			} else {
				n();
				r.hide();
			}
		}
		function h(y) {
			if (!y) {
				return [ "" ];
			}
			if (!g.multiple) {
				return [ a.trim(y) ];
			}
			return a.map(y.split(g.multipleSeparator), function(z) {
				return a.trim(y).length ? a.trim(z) : null;
			});
		}
		function i(y) {
			if (!g.multiple) {
				return y;
			}
			var A = h(y);
			if (A.length == 1) {
				return A[0];
			}
			var z = a(l).selection().start;
			if (z == y.length) {
				A = h(y);
			} else {
				A = h(y.replace(y.substring(z), ""));
			}
			return A[A.length - 1];
		}
		function q(y, z) {
			if (g.autoFill && (i(b.val()).toLowerCase() == y.toLowerCase())
					&& u != c.BACKSPACE) {
				b.val(b.val() + z.substring(i(p).length));
				a(l).selection(p.length, p.length + z.length);
			}
		}
		function s() {
			clearTimeout(j);
			j = setTimeout(v, 200);
		}
		function v() {
			var y = r.visible();
			r.hide();
			clearTimeout(j);
			n();
			if (g.mustMatch) {
				b.search(function(z) {
					if (!z) {
						if (g.multiple) {
							var A = h(b.val()).slice(0, -1);
							b.val(A.join(g.multipleSeparator)
									+ (A.length ? g.multipleSeparator : ""));
						} else {
							b.val("");
							b.trigger("result", null);
						}
					}
				});
			}
		}
		function k(z, y) {
			if (y && y.length && e) {
				n();
				r.display(y, z);
				q(z, y[0].value);
				r.show();
			} else {
				v();
			}
		}
		function f(z, B, y) {
			if (!g.matchCase) {
				z = z.toLowerCase();
			}
			var A = m.load(z);
			if (A && A.length) {
				B(z, A);
			} else {
				if ((typeof g.url == "string") && (g.url.length > 0)) {
					var C = {
						timestamp : +new Date()
					};
					a.each(g.extraParams, function(D, E) {
						C[D] = typeof E == "function" ? E() : E;
					});
					a.ajax( {
						mode : "abort",
						port : "autocomplete" + l.name,
						dataType : g.dataType,
						url : g.url,
						data : a.extend( {
							q : i(z),
							limit : g.max
						}, C),
						success : function(E) {
							var D = g.parse && g.parse(E) || o(E);
							m.add(z, D);
							B(z, D);
						}
					});
				} else {
					r.emptyList();
					y(z);
				}
			}
		}
		function o(B) {
			var y = [];
			var A = B.split("\n");
			for ( var z = 0; z < A.length; z++) {
				var C = a.trim(A[z]);
				if (C) {
					C = C.split("|");
					y[y.length] = {
						data : C,
						value : C[0],
						result : g.formatResult && g.formatResult(C, C[0])
								|| C[0]
					};
				}
			}
			return y;
		}
		function n() {
			b.removeClass(g.loadingClass);
		}
	};
	a.Autocompleter.defaults = {
		inputClass : "ac_input",
		resultsClass : "ac_results",
		loadingClass : "ac_loading",
		minChars : 1,
		delay : 400,
		matchCase : false,
		matchSubset : true,
		matchContains : false,
		cacheLength : 10,
		max : 100,
		mustMatch : false,
		extraParams : {},
		selectFirst : true,
		formatItem : function(b) {
			return b[0];
		},
		formatMatch : null,
		autoFill : false,
		width : 0,
		multiple : false,
		multipleSeparator : ", ",
		highlight : function(c, b) {
			return c.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("
					+ b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1")
					+ ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
		},
		scroll : true,
		dataType : "text",
		scrollHeight : 180
	};
	a.Autocompleter.Cache = function(c) {
		var f = {};
		var d = 0;
		function h(l, k) {
			if (!c.matchCase) {
				l = l.toLowerCase();
			}
			var j = l.indexOf(k);
			if (c.matchContains == "word") {
				j = l.toLowerCase().search("\\b" + k.toLowerCase());
			}
			if (j == -1) {
				return false;
			}
			return j == 0 || c.matchContains;
		}
		function g(j, i) {
			if (d > c.cacheLength) {
				b();
			}
			if (!f[j]) {
				d++;
			}
			f[j] = i;
		}
		function e() {
			if (!c.data) {
				return false;
			}
			var k = {}, j = 0;
			if (!c.url) {
				c.cacheLength = 1;
			}
			k[""] = [];
			for ( var m = 0, l = c.data.length; m < l; m++) {
				var p = c.data[m];
				p = (typeof p == "string") ? [ p ] : p;
				var o = c.formatMatch(p, m + 1, c.data.length);
				if (o === false) {
					continue;
				}
				var n = o.charAt(0).toLowerCase();
				if (!k[n]) {
					k[n] = [];
				}
				var q = {
					value : o,
					data : p,
					result : c.formatResult && c.formatResult(p) || o
				};
				k[n].push(q);
				if (j++ < c.max) {
					k[""].push(q);
				}
			}
			a.each(k, function(r, s) {
				c.cacheLength++;
				g(r, s);
			});
		}
		setTimeout(e, 25);
		function b() {
			f = {};
			d = 0;
		}
		return {
			flush : b,
			add : g,
			populate : e,
			load : function(n) {
				if (!c.cacheLength || !d) {
					return null;
				}
				if (!c.url && c.matchContains) {
					var m = [];
					for ( var j in f) {
						if (j.length > 0) {
							var o = f[j];
							a.each(o, function(p, k) {
								if (h(k.value, n)) {
									m.push(k);
								}
							});
						}
					}
					return m;
				} else {
					if (f[n]) {
						return f[n];
					} else {
						if (c.matchSubset) {
							for ( var l = n.length - 1; l >= c.minChars; l--) {
								var o = f[n.substr(0, l)];
								if (o) {
									var m = [];
									a.each(o, function(p, k) {
										if (h(k.value, n)) {
											m[m.length] = k;
										}
									});
									return m;
								}
							}
						}
					}
				}
				return null;
			}
		};
	};
	a.Autocompleter.Select = function(e, j, l, p) {
		var i = {
			ACTIVE : "ac_over"
		};
		var k, f = -1, r, m = "", s = true, c, o;
		function n() {
			if (!s) {
				return;
			}
			c = a("<div/>").hide().addClass(e.resultsClass).css("position",
					"absolute").appendTo(document.body);
			o = a("<ul/>").appendTo(c).mouseover(function(t) {
				if (q(t).nodeName && q(t).nodeName.toUpperCase() == "LI") {
					f = a("li", o).removeClass(i.ACTIVE).index(q(t));
					a(q(t)).addClass(i.ACTIVE);
				}
			}).click(function(t) {
				a(q(t)).addClass(i.ACTIVE);
				l();
				j.focus();
				return false;
			}).mousedown(function() {
				p.mouseDownOnSelect = true;
			}).mouseup(function() {
				p.mouseDownOnSelect = false;
			});
			if (e.width > 0) {
				c.css("width", e.width);
			}
			s = false;
		}
		function q(u) {
			var t = u.target;
			while (t && t.tagName != "LI") {
				t = t.parentNode;
			}
			if (!t) {
				return [];
			}
			return t;
		}
		function h(t) {
			k.slice(f, f + 1).removeClass(i.ACTIVE);
			g(t);
			var v = k.slice(f, f + 1).addClass(i.ACTIVE);
			if (e.scroll) {
				var u = 0;
				k.slice(0, f).each(function() {
					u += this.offsetHeight;
				});
				if ((u + v[0].offsetHeight - o.scrollTop()) > o[0].clientHeight) {
					o.scrollTop(u + v[0].offsetHeight - o.innerHeight());
				} else {
					if (u < o.scrollTop()) {
						o.scrollTop(u);
					}
				}
			}
		}
		function g(t) {
			f += t;
			if (f < 0) {
				f = k.size() - 1;
			} else {
				if (f >= k.size()) {
					f = 0;
				}
			}
		}
		function b(t) {
			return e.max && e.max < t ? e.max : t;
		}
		function d() {
			o.empty();
			var u = b(r.length);
			for ( var v = 0; v < u; v++) {
				if (!r[v]) {
					continue;
				}
				var w = e.formatItem(r[v].data, v + 1, u, r[v].value, m);
				if (w === false) {
					continue;
				}
				var t = a("<li/>").html(e.highlight(w, m)).addClass(
						v % 2 == 0 ? "ac_even" : "ac_odd").appendTo(o)[0];
				a.data(t, "ac_data", r[v]);
			}
			k = o.find("li");
			if (e.selectFirst) {
				k.slice(0, 1).addClass(i.ACTIVE);
				f = 0;
			}
			if (a.fn.bgiframe) {
				o.bgiframe();
			}
		}
		return {
			display : function(u, t) {
				n();
				r = u;
				m = t;
				d();
			},
			next : function() {
				h(1);
			},
			prev : function() {
				h(-1);
			},
			pageUp : function() {
				if (f != 0 && f - 8 < 0) {
					h(-f);
				} else {
					h(-8);
				}
			},
			pageDown : function() {
				if (f != k.size() - 1 && f + 8 > k.size()) {
					h(k.size() - 1 - f);
				} else {
					h(8);
				}
			},
			hide : function() {
				c && c.hide();
				k && k.removeClass(i.ACTIVE);
				f = -1;
			},
			visible : function() {
				return c && c.is(":visible");
			},
			current : function() {
				return this.visible()
						&& (k.filter("." + i.ACTIVE)[0] || e.selectFirst
								&& k[0]);
			},
			show : function() {
				var v = a(j).offset();
				c
						.css(
								{
									width : typeof e.width == "string"
											|| e.width > 0 ? e.width : a(j)
											.width(),
									top : v.top + j.offsetHeight,
									left : v.left
								}).show();
				if (e.scroll) {
					o.scrollTop(0);
					o.css( {
						maxHeight : e.scrollHeight,
						overflow : "auto"
					});
					if (a.browser.msie
							&& typeof document.body.style.maxHeight === "undefined") {
						var t = 0;
						k.each(function() {
							t += this.offsetHeight;
						});
						var u = t > e.scrollHeight;
						o.css("height", u ? e.scrollHeight : t);
						if (!u) {
							k.width(o.width() - parseInt(k.css("padding-left"))
									- parseInt(k.css("padding-right")));
						}
					}
				}
			},
			selected : function() {
				var t = k && k.filter("." + i.ACTIVE).removeClass(i.ACTIVE);
				return t && t.length && a.data(t[0], "ac_data");
			},
			emptyList : function() {
				o && o.empty();
			},
			unbind : function() {
				c && c.remove();
			}
		};
	};
	a.fn.selection = function(i, b) {
		if (i !== undefined) {
			return this.each(function() {
				if (this.createTextRange) {
					var j = this.createTextRange();
					if (b === undefined || i == b) {
						j.move("character", i);
						j.select();
					} else {
						j.collapse(true);
						j.moveStart("character", i);
						j.moveEnd("character", b);
						j.select();
					}
				} else {
					if (this.setSelectionRange) {
						this.setSelectionRange(i, b);
					} else {
						if (this.selectionStart) {
							this.selectionStart = i;
							this.selectionEnd = b;
						}
					}
				}
			});
		}
		var g = this[0];
		if (g.createTextRange) {
			var c = document.selection.createRange(), h = g.value, f = "<->", d = c.text.length;
			c.text = f;
			var e = g.value.indexOf(f);
			g.value = h;
			this.selection(e, e + d);
			return {
				start : e,
				end : e + d
			};
		} else {
			if (g.selectionStart !== undefined) {
				return {
					start : g.selectionStart,
					end : g.selectionEnd
				};
			}
		}
	};
})(jQuery);